<?php

/*
 * Usuario
 */

class Usuario implements iPersistente,  iJson{
    
    private $nombre;
    private $nombreUsuario;
    private $password;
    private $email;
    
    private $yaPersistido;
    
    private $broker;
    public function getPassword() {
        return $this->password;
    }

    public function setPassword($password) {
        $this->password = $password;
    }

    public function getYaPersistido() {
        return $this->yaPersistido;
    }

    public function setYaPersistido($yaPersistido) {
        $this->yaPersistido = $yaPersistido;
    }

        public function getNombre() {
        return $this->nombre;
    }

    public function setNombre($nombre) {
        $this->nombre = $nombre;
    }

    public function getNombreUsuario() {
        return $this->nombreUsuario;
    }

    public function getEmail() {
        return $this->email;
    }

    public function setEmail($email) {
        $this->email = $email;
    }

        
    public function __construct($enJson=null, $n='',$nu='',$p='',$e='',$boolP = false) {
      if ( $enJson <> null ){
        $this->checkJson($enJson);
        $valores = json_decode($enJson);
        $this->nombre = $valores->nombre;
        $this->nombreUsuario = $valores->nombreUsuario;
        $this->password = $valores->password;
        $this->email = $valores->email;
        $this->broker = new Broker($this);
        $this->yaPersistido = $valores->yaPersistido;      
      }else{
        $this->nombre = $n;
        $this->nombreUsuario = $nu;
        $this->password = $p;
        $this->email = $e;
        $this->broker = new Broker($this);
        $this->yaPersistido = $boolP;
      }
    }
    
    public function borrar() {
        $this->broker->borrar("DELETE FROM usuario WHERE nombreusuario = \"".addslashes($this->nombreUsuario)."\"");
    }
    public function guardar() {
        if ( $this->getYaPersistido() == 'true' ){            
            $this->broker->guardar("UPDATE usuario set nombre = \"".addslashes($this->nombre)."\", email = \"".addslashes($this->email)."\" WHERE nombreusuario = \"".addslashes($this->nombreUsuario)."\"");
        }else{            
            
            $this->broker->guardar("INSERT INTO usuario (nombre, nombreusuario, password, email) VALUES (\"".addslashes($this->nombre)."\", \"".addslashes($this->nombreUsuario)."\", \"".md5($this->password)."\", \"".addslashes($this->email)."\")");
            $this->yaPersistido = true;            
        }        
    }
    public function obtenerTodos() {
        $this->broker->obtenerTodos("Select * from usuario order by nombreusuario");        
        $retorno = Array();
        $dato = $this->broker->Siguiente();
        while ( $dato <> null ){
            $retorno[] = new Usuario(null,  stripslashes($dato["nombre"]), stripslashes($dato["nombreusuario"]), $dato["password"], stripslashes($dato["email"]), true);
            $dato = $this->broker->Siguiente();                    
        }
        $this->broker->Libero();
        return $retorno;
    }
    public function obtenerXid($id) {
        $this->broker->obtenerXid("Select * from usuario where nombreusuario = \"$id\"");
        $dato = $this->broker->Siguiente();
        $retorno = $dato <> null ? new Usuario(null,stripslashes($dato["nombre"]), stripslashes($dato["nombreusuario"]), stripslashes($dato["password"]), stripslashes($dato["email"]), true) : null;
        return $retorno;
    }

    public function toJson() {
        $ret = new stdClass();
        $ret->email = $this->email;
        $ret->nombre = $this->nombre;
        $ret->nombreUsuario = $this->nombreUsuario;
        $ret->password = $this->password;
        $ret->yaPersistido = $this->yaPersistido;
        return $ret;
    }
    
    public function checkJson($s) {
        $elem = json_decode($s);
        if ( !isset($elem->nombre) || !isset($elem->nombreUsuario) || !isset($elem->password) ||
                !isset($elem->email) || !isset($elem->yaPersistido)){
            throw new Exception("Obj. Usuario JSon Invalido");
        }
    }
}
?>
